package com.ssy.lingxi.purchase.entity.bidding;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.ssy.lingxi.purchase.api.dto.request.EnclosureUrlsRequest;
import com.ssy.lingxi.purchase.entity.converter.JpaJsonToEnclosureUrlsRequestListConverter;
import com.ssy.lingxi.purchase.entity.converter.JpaJsonToShopIdConverter;
import com.ssy.lingxi.purchase.entity.onlinebidding.OnLineBidding;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.List;

/**
 * 采购竞价实体
 */
@Getter
@Setter
@Entity
@Table(schema = "public", name = "pu_bidding")
public class Bidding {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "bidding_seq")
    @SequenceGenerator(sequenceName = "pu_bidding_seq", name = "bidding_seq", allocationSize = 1)
    private Long id;

    /**
     * 竞价单号
     */
    @Column
    private String biddingNo;

    /**
     * 供应商在线竞价信息
     */
    @JsonManagedReference
    @OneToOne(mappedBy = "bidding", cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
    @JoinColumn(name = "onLine_bidding_id", referencedColumnName = "id")
    private OnLineBidding onLineBidding;

    /**
     * 竞价单摘要
     */
    @Column
    private String details;

    /**
     * 竞价开始时间
     */
    @Column
    private Long biddingStartTime;

    /**
     * 竞价结束时间
     */
    @Column
    private Long biddingEndTime;

    /**
     *是否使用地市：1-是，0-否
     */
    @Column
    private Integer isAreas;

    /**
     * 适用地市
     */
    @JsonManagedReference
    @OneToMany(mappedBy = "bidding", cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
    private List<BiddingArea> areas;

    /**
     *添加采购物料方式：1.选择货品生成 2.导入货品生成(拓展使用 目前无使用)
     */
    @Column
    private  Integer materielMode;

    /**
     * 物料信息
     */
    @JsonManagedReference
    @OneToMany(mappedBy = "bidding", cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
    private List<BiddingProduct> products;

    /**
     *是否有起拍价：1.是 0.否
     */
    @Column
    private Integer isStartingPrice;

    /**
     *起拍价
     */
    private Double startingPrice;

    /**
     *是否有目标价：1.是 0.否
     */
    @Column
    private Integer isTargetPrice;

    /**
     *目标价
     */
    @Column
    private Double targetPrice;

    /**
     *是否有最小价差：1.是 0.否
     */
    @Column
    private Integer isMinPrice;

    /**
     *最小价差
     */
    @Column
    private Double minPrice;

    /**
     *允许报价次数
     */
    @Column
    private Integer allowPurchaseCount;

    /**
     *公开当前最低报价 1.是 0.否
     */
    @Column
    private Integer isOpenPurchase;

    /**
     *公开报价排名 1.是 0.否
     */
    @Column
    private Integer isOpenRanking;

    /**
     *报名要求时间开始
     */
    @Column
    private Long startSignUp;

    /**
     *报名要求时间结束
     */
    @Column
    private Long endSignUp;

    /**
     *报名要求
     */
    private String demand;

    /**
     * 报名要求附件
     */
    @Convert(converter = JpaJsonToEnclosureUrlsRequestListConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<EnclosureUrlsRequest> demandUrls;

    /**
     *交付日期
     */
    @Column
    private Long deliver;

    /**
     *交付地址
     */
    @Column
    private String address;

    /**
     *交付地址Id
     */
    @Column
    private Long addressId;

    /**
     *报价要求
     */
    @Column
    private String offer;

    /**
     *付款方式
     */
    @Column
    private String paymentType;

    /**
     * 税费要求
     */
    @Column
    private String taxes;

    /**
     *物流要求
     */
    @Column
    private String logistics;

    /**
     *包装要求
     */
    @Column
    private String packRequire;

    /**
     *其他要求
     */
    @Column
    private String otherRequire;

    /**
     * 交易条件附件
     */
    @Convert(converter = JpaJsonToEnclosureUrlsRequestListConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<EnclosureUrlsRequest> urls;

    /**
     *需求对接类型：1.发布至平台 2.系统匹配(拓展, 目前未使用) 3.邀请
     */
    @Column
    private Integer type;

    /**
     * 邀请会员信息(类型为发布至平台则无邀请信息)
     */
    @JsonManagedReference
    @OneToMany(mappedBy = "bidding", cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
    private List<BiddingDemandMember> members;

    /**
     * 创建会员
     */
    private Long createMemberId;

    /**
     * 创建会员
     */
    private Long createMemberRoleId;

    /**
     * 创建会员
     */
    private String createMemberName;

    /**
     * 单据时间
     */
    @Column
    private Long createTime;

    /**
     * 最后修改时间
     */
    @Column
    private Long updateTime;

    /**
     * 外部状态
     */
    @Column
    private Integer externalState;

    /**
     * 外部工作流流程taskId
     */
    @Column
    private String externalTaskId;

    /**
     * 下一步骤，如果为0表示流程已经结束，没有下一步
     */
    @Column
    private Integer externalNextStep;

    /**
     * 内部状态
     */
    @Column
    private Integer interiorState;

    /**
     * 内部工作流流程taskId
     */
    private String interiorTaskId;

    /**
     * 下一步骤，如果为0表示流程已经结束，没有下一步
     */
    private Integer interiorNextStep;

    /**
     * 审核竞价结果内部流转 下一步骤，如果为0表示流程已经结束，没有下一步
     */
    private Integer auditInteriorNextStep;

    /**
     * 审核竞价结果内部流转(所有供应商共用状态)
     */
    private Integer auditInteriorState;

    /**
     * 审核竞价结果内部流转taskId
     */
    private String auditInteriorTaskId;

    /**
     * 发布竞价 绑定的商城Id
     */
    @Convert(converter = JpaJsonToShopIdConverter.class)
    @Column(columnDefinition = "jsonb")
    private List<Long> shopIds;

    /**
     *竞价单类型: 参考ShopTypeEnum
     * 1.企业商城与 6采购门户
     */
    private Integer shopType=6;

    /**
     *作废原因
     */
    private String discardCause;

    /**
     *作废时间
     */
    private Long discardTime;
}
